﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace AvaProvi
{
    [Serializable]
    public class clsInfraestructura_CRN:clsEstado,IControlEstados
    {
        #region Propiedades de clase
        public clsInmueble_CRN Inmueble { get; set; }
        public string AguaPotable { get; set; }
        public string DrenajeConexion { get; set; }
        public string ElectrificacionConexion { get; set; }
        public string TipoElectrificacion { get; set; }
        public string AlumbradoPublico { get; set; }
        public string Guarniciones { get; set; }
        public string BanquetasTipo { get; set; }
        public string BanquetasEstado { get; set; }
        public string VialidadesAcceso { get; set; }
        public string EstadoPavimentacion { get; set; }
        public string TipoPavimentacion { get; set; }
        public string TipoTelefono { get; set; }
        public string ConexionTelefono { get; set; }
        public string Basura { get; set; }
        public string Vigilacia { get; set; }
        public string GasNatural { get; set; }
        public string EstadoSenializacion { get; set; }
        public string TipoSenializacion { get; set; }
        public string TipoTransporte { get; set; }
        public string Frecuencia { get; set; }
        public string Distancia { get; set; }
        public BindingList<clsTipoDrenaje_CRN> TiposDeDrenaje { get; set; }
        #endregion

        #region Constructor
        public clsInfraestructura_CRN(clsInmueble_CRN objInmueble):base()
        {
            this.AguaPotable = string.Empty;
            this.AlumbradoPublico = string.Empty;
            this.BanquetasEstado = string.Empty;
            this.BanquetasTipo = string.Empty;
            this.Basura = string.Empty;
            this.ConexionTelefono = string.Empty;
            this.DrenajeConexion = string.Empty;
            this.Distancia = string.Empty;
            this.ElectrificacionConexion = string.Empty;
            this.EstadoPavimentacion = string.Empty;
            this.EstadoSenializacion = string.Empty;
            this.Frecuencia = string.Empty;
            this.GasNatural = string.Empty;
            this.Guarniciones = string.Empty;
            this.Inmueble = objInmueble;
            this.TipoElectrificacion = string.Empty;
            this.TipoPavimentacion = string.Empty;
            this.TiposDeDrenaje = new BindingList<clsTipoDrenaje_CRN>();
            this.TipoSenializacion = string.Empty;
            this.TipoTelefono = string.Empty;
            this.TipoTransporte = string.Empty;
            this.VialidadesAcceso = string.Empty;
            this.Vigilacia = string.Empty;
        }
        #endregion

        #region Métodos

        public void ConvertirANuevo()
        {
            this.EsNuevo = true;
            foreach (clsTipoDrenaje_CRN tipoDrenaje in this.TiposDeDrenaje)
            {
                tipoDrenaje.EsNuevo = true;
            }
        }
        public bool Guardar()
        {
            if (DatosValidos())
            {
                if (this.EsNuevo)
                    return CreaInfraestructura();
                else
                {
                    if (this.EsModificado)
                        return ModificaInfraestructura();
                    else
                        return EliminaInfraestructura();
                }
            }
            return false;
        }

        private bool EliminaInfraestructura()
        {
            clsInfraestructura_CD objInfraestructura_CD = new clsInfraestructura_CD();
            return objInfraestructura_CD.EliminaInfraestructura(this);
        }

        private bool ModificaInfraestructura()
        {
            clsInfraestructura_CD objInfraestructura_CD = new clsInfraestructura_CD();
            if (objInfraestructura_CD.ModificaInfraestructura(this))
            {
                if (this.TiposDeDrenaje != null)
                {
                    foreach (clsTipoDrenaje_CRN objDrenaje in this.TiposDeDrenaje)
                    {
                        objDrenaje.Guardar();
                    }
                    this.TiposDeDrenaje = clsTipoDrenaje_CRN.RecuperaTiposDeDrenaje(this);
                }
                return true;
            }
            return false;
        }

        private bool CreaInfraestructura()
        {
            clsInfraestructura_CD objInfraestructura_CD = new clsInfraestructura_CD();
            if (objInfraestructura_CD.CreaInfraestructura(this))
            {
                this.EsModificado = true;

                if (this.TiposDeDrenaje != null)
                {
                    foreach (clsTipoDrenaje_CRN objDrenaje in this.TiposDeDrenaje)
                    {
                        objDrenaje.Guardar();
                    }
                    this.TiposDeDrenaje = clsTipoDrenaje_CRN.RecuperaTiposDeDrenaje(this);
                }
                return true;
            }
            return false;
        }

        public bool DatosValidos()
        {
            return true;
        }

        public static clsInfraestructura_CRN RecuperaInfraestructura(clsInmueble_CRN objInmueble)
        {
            clsInfraestructura_CRN objInfraestructura = new clsInfraestructura_CRN(objInmueble);
            clsInfraestructura_CD objInfraestructura_CD = new clsInfraestructura_CD();
            dsInmoviliario.InfraestructuraRow objInfraestructuraRecuperada = objInfraestructura_CD.RecuperaInfraestructura(objInmueble.Avaluo.IdAvaluo);
            if (objInfraestructuraRecuperada != null)
            {
                objInfraestructura.AguaPotable = objInfraestructuraRecuperada.AguaPotable;
                objInfraestructura.AlumbradoPublico = objInfraestructuraRecuperada.AlumbradoPublico;
                objInfraestructura.BanquetasEstado = objInfraestructuraRecuperada.BanquetasEstado;
                objInfraestructura.BanquetasTipo = objInfraestructuraRecuperada.BanquetasTipo;
                objInfraestructura.Basura = objInfraestructuraRecuperada.Basura;
                objInfraestructura.ConexionTelefono = objInfraestructuraRecuperada.ConexionTelefono;
                objInfraestructura.Distancia = objInfraestructuraRecuperada.Distancia;
                objInfraestructura.DrenajeConexion = objInfraestructuraRecuperada.DrenajeConexion;
                objInfraestructura.ElectrificacionConexion = objInfraestructuraRecuperada.ElectrificacionConexion;
                objInfraestructura.EsModificado = true;
                objInfraestructura.EstadoPavimentacion = objInfraestructuraRecuperada.EstadoPavimentacion;
                objInfraestructura.EstadoSenializacion = objInfraestructuraRecuperada.EstadoSenializacion;
                objInfraestructura.Frecuencia = objInfraestructuraRecuperada.Frecuencia;
                objInfraestructura.GasNatural = objInfraestructuraRecuperada.GasNatural;
                objInfraestructura.Guarniciones = objInfraestructuraRecuperada.Guarniciones;
                objInfraestructura.TipoElectrificacion = objInfraestructuraRecuperada.TipoElectrificacion;
                objInfraestructura.TipoPavimentacion = objInfraestructuraRecuperada.TipoPavimentacion;
                objInfraestructura.TipoSenializacion = objInfraestructuraRecuperada.TipoSenializacion;
                objInfraestructura.TipoTelefono = objInfraestructuraRecuperada.TipoTelefono;
                objInfraestructura.TipoTransporte = objInfraestructuraRecuperada.TipoTransporte;
                objInfraestructura.VialidadesAcceso = objInfraestructuraRecuperada.VialidadesAcceso;
                objInfraestructura.Vigilacia = objInfraestructuraRecuperada.Vigilancia;
                objInfraestructura.TiposDeDrenaje = clsTipoDrenaje_CRN.RecuperaTiposDeDrenaje(objInfraestructura);
            }
            return objInfraestructura;
        }

        #endregion
    }
}
